package com.xzk.service;

import com.xzk.bean.User;
import com.xzk.exception.DuplicateIdCardException;
import com.xzk.exception.DuplicatePhoneException;

import java.util.List;
import java.util.Map;

/**
 * @InterfaceName UserService
 * @Description 用户Service层接口
 * @Author 0715-YuHao
 * @Date 2020/10/7 15:32
 * @Version 1.0
 */
public interface UserService {
    /**
     * @Author 0715-YuHao
     * @Description 用于用于查询数据库中的全部用户（总数+新增）
     * @Date 15:41 2020/9/14
     * @Param []
     * @return [{size:总数,daySize:新增}]
     **/
    Map<String,Integer> console();

    /**
     * @Author 0715-YuHao
     * @Description 查询所有用户信息
     * @Date 15:43 2020/9/14
     * @return 用户的集合
     **/
    List<User> findAll();

    /**
     * @Author 0715-YuHao
     * @Description 更新登录时间
     * @Date 2020/9/16 9:27
     * @Param [userPhone, date]
     * @return boolean
     */
    void updateLoginTime(String userPhone);

    /**
     * @Author 0715-YuHao
     * @Description 通过电话号码查询用户信息
     * @Date 15:44 2020/9/14
     * @Param [phone] 要查询的电话号码
     * @return 用户的信息，电话不存在时返回null;
     **/
    User findByPhone(String phone);

    /**
     * @Author 0715-YuHao
     * @Description 添加用户
     * @Date 15:46 2020/9/14
     * @Param [courier] [要添加的用户信息]
     * @return 添加的结果，true表示成功，false表示失败
     **/
    boolean insert(User user) throws DuplicateIdCardException, DuplicatePhoneException;

    /**
     * @Author 0715-YuHao
     * @Description 用户注册
     * @Date 17:24 2020/9/17
     * @Param [userPhone] [注册手机号]
     * @return 注册的结果，true表示成功，false表示失败
     **/
    boolean signUp(String userPhone) throws DuplicatePhoneException;

    /**
     * @Author 0715-YuHao
     * @Description 修改用户
     * @Date 15:49 2020/9/14
     * @Param [id, newCourier] [要修改的用户id, 新的用户对象(nickName, phone, idCard, password)]
     * @return 修改的结果，true表示成功，false表示失败
     **/
    boolean update(int id, User newUser) throws DuplicateIdCardException, DuplicatePhoneException;

    /**
     * @Author 0715-YuHao
     * @Description 微信端修改用户信息
     * @Date 10:46 2020/9/18
     * @Param [userPhone]
     * @return boolean
     **/
    boolean updateByWx(String userPhone, User newUser);

    /**
     * @Author 0715-YuHao
     * @Description 用户认证
     * @Date 0:51 2020/9/18
     * @Param [phone, newUser]
     * @return boolean
     **/
    boolean updateByPhone(String phone, User newUser) throws DuplicateIdCardException;

    /**
     * @Author 0715-YuHao
     * @Description 删除用户
     * @Date 15:53 2020/9/14
     * @Param [id] [要删除的用户id, 手机号码，身份证号码]
     * @return 删除的结果，true表示成功，false表示失败
     **/
    boolean delete(int id, String phone, String idCard);
}
